介紹
工廠模式是將物件創建的動作封裝起來,並通過一個共用介面來指向新創建的物件。工廠模式依實作方式分三類: 簡單工廠模式(Simple factory)、工廠方法模式(Factory method)、抽象工廠模式(Abstract factory)。
簡單工程模式
透過向工廠傳入代號(如: enum、字串...等)來創建指定的物件。
C++範例:
#include <iostream>
// 怪物介面
class Monster
{
public:
virtual void Say() const = 0;
virtual ~Monster() {}
};
// 實作怪物介面1
class HeadcrabMonster : public Monster
{
public:
void Say() const override
{
std::cout << "I am a headcrab!" << std::endl;
}
};
// 實作怪物介面2
class ZombieMonster : public Monster
{
public:
void Say() const override
{
std::cout << "I am a zombie!" << std::endl;
}
};
// 創建怪物物件的工場
class MonsterFactory
{
public:
// 透過傳入代號來指定創建的怪物物件,這裡代號用怪物名稱字串展示
static Monster *CreateMonster(const std::string &strMonsterID)
{
if (strMonsterID == "headcrab")
return new HeadcrabMonster();
if (strMonsterID == "zombie")
return new ZombieMonster();
return nullptr;
}
};
int main()
{
Monster *headcrab = MonsterFactory::CreateMonster("headcrab");
if (headcrab)
{
headcrab->Say();
delete headcrab;
}
Monster *zombie = MonsterFactory::CreateMonster("zombie");
if (zombie)
{
zombie->Say();
delete zombie;
}
return 0;
}
Output:
I am a headcrab!
I am a zombie!
優點: 工廠封裝物件的創建,不對用戶暴露物件創建的邏輯。
缺點: 擴展性差,每當加入新類別創建都需要修改工廠類。